package cn.tedu.reflection;/**
 * @Author 金帮嘉诚 @Date 2021-06-24 星期四 19:58
 */
/*本类用于测试反射1*/

import org.junit.Test;
import java.lang.reflect.Constructor;
import java.util.Arrays;

/**知识点*/
public class TestReflect1 {
    /*单元测试方法：是java测试的最小单位，使用灵活，推荐指数五颗星
    * 语法要求：@Test+public+void+没有参数
    * 注意使用时需要导包：Add Junit4 to classPath*/
    @Test
    public void getClazz() throws ClassNotFoundException {
        //三种获取字节码对象的方法
        //全路径名，包名+类名
        Class<?> student1=Class.forName("cn.tedu.reflection.Student");
        Class<?> student2=Student.class;
        //匿名对象
        Class<?> student3=new Student().getClass();

        //三个方法
        System.out.println(student1.getName());
        System.out.println(student1.getPackage().getName());
        System.out.println(student1.getSimpleName());
    }
    //获取构造方法
//    @Test
//    public void getConstructor(){
//        Class<?> student1=Student.class;
//
//        Constructor<?>[] cs=student1.getConstructors();//用Constructor类来接
//        //循环获取
//        for (Constructor c:cs
//             ) {
//            System.out.println(c);
////            System.out.println(c.getName());//public cn.tedu.reflection.Student()有参数也会输出参数列表
//            Class[] cp=c.getParameterTypes();//获取参数类型，参数类型属于一种类，故返回Class类数组
//            System.out.println(Arrays.toString(cp));
//        }
//    }
//    @Test
//    public void getCon(){
//        Class<Student> clazz = Student.class;
//
//        Constructor<?>[] cs = clazz.getConstructors();
//        for (Constructor c:cs
//             ) {
//            System.out.println(c.getName());
//            Class[] pt = c.getParameterTypes();
//            System.out.println(Arrays.toString(pt));
//        }
//    }

    @Test
    public void getCo(){
        Class<Student> clazz = Student.class;

        Constructor<?>[] cs = clazz.getConstructors();
        for (Constructor c:cs
             ) {
            System.out.println(c.getName());
            Class[] parameterTypes = c.getParameterTypes();
            System.out.println(Arrays.toString(parameterTypes));
        }
    }

}
